package com.vote.quartz.task;

import com.vote.business.domain.VoteInfo;
import com.vote.business.service.IVoteInfoService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * 投票活动定时任务（检测过期并自动结束）
 */
@Component
public class VoteTimerTask {
    private static final Logger log = LoggerFactory.getLogger(VoteTimerTask.class);

    @Resource
    private IVoteInfoService voteInfoService;
    /**
     * 每5分钟执行一次（cron表达式：0 0/5 * * * ?）
     * 作用：检测已发布但已过期的投票活动，自动更新为“已结束”
     */
//    @Scheduled(cron = "0 0/5 * * * ?")
    public void checkExpiredVote() {
        log.info("开始检测过期投票活动，当前时间：{}", new Date());
        try {
            Integer count=0;
            // 1. 查询所有状态为“已发布”的活动
            VoteInfo query = new VoteInfo();
            query.setStatus(VoteInfo.STATUS_PUBLISHED);
            List<VoteInfo> voteList = voteInfoService.selectVoteInfoList(query);

            if (voteList.isEmpty()) {
                log.info("成功更新{}个过期投票活动状态为已结束", count);
                return; // 无符合条件的活动，直接返回

            }

            // 2. 遍历检测是否过期
            Date now = new Date();
            for (VoteInfo voteInfo : voteList) {
                Date endTime = voteInfo.getEndTime();
                // 若当前时间已超过结束时间，更新状态为“已结束”
                if (now.after(endTime)) {
                    VoteInfo update = new VoteInfo();
                    update.setVoteId(voteInfo.getVoteId());
                    update.setStatus(VoteInfo.STATUS_ENDED);
                    update.setUpdateTime(now);
                    // 调用Service更新状态（建议Service层添加事务）
                    voteInfoService.updateVoteInfoStatus(update);
                    count++;
                }
            }
            log.info("成功更新{}个过期投票活动状态为已结束", count);
        } catch (Exception e) {
            // 记录异常日志（若依框架使用logback，可注入Logger）
            e.printStackTrace();
        }
    }
}
